package auth

import (
	"time"
)

// User 用户表模型
type User struct {
	ID                uint64     `gorm:"primary_key;auto_increment" json:"id"`
	Phone             string     `gorm:"type:varchar(20);uniqueIndex;comment:手机号" json:"phone"`
	Username          string     `gorm:"type:varchar(50);uniqueIndex;comment:用户名" json:"username"`
	Password          string     `gorm:"type:varchar(255);comment:密码hash" json:"-"`
	Nickname          string     `gorm:"type:varchar(100);comment:昵称" json:"nickname"`
	Avatar            string     `gorm:"type:varchar(500);comment:头像URL" json:"avatar"`
	Email             string     `gorm:"type:varchar(100);comment:邮箱地址" json:"email"`
	Birthday          *time.Time `gorm:"type:date;comment:生日" json:"birthday"`
	Gender            int        `gorm:"type:tinyint;default:0;comment:性别 0:未设置 1:男 2:女 3:其他" json:"gender"`
	WechatOpenID      string     `gorm:"type:varchar(100);uniqueIndex;comment:微信OpenID" json:"wechat_open_id"`
	DouyinUID         string     `gorm:"type:varchar(100);uniqueIndex;comment:抖音UID" json:"douyin_uid"`
	LoginType         int        `gorm:"type:tinyint;default:1;comment:主要登录方式 1:手机号 2:用户名 3:微信 4:抖音" json:"login_type"`
	Status            int        `gorm:"type:tinyint;default:1;comment:状态 1:正常 2:禁用" json:"status"`
	RefreshToken      string     `gorm:"type:varchar(512);comment:刷新令牌" json:"-"`
	RefreshTokenExpAt *time.Time `gorm:"comment:刷新令牌过期时间" json:"-"`
	LastLoginIP       string     `gorm:"type:varchar(45);comment:最后登录IP" json:"last_login_ip"`
	LastLoginTime     time.Time  `gorm:"comment:最后登录时间" json:"last_login_time"`
	RegisterIP        string     `gorm:"type:varchar(45);comment:注册IP" json:"register_ip"`
	RegisterTime      time.Time  `gorm:"autoCreateTime;comment:注册时间" json:"register_time"`
	UpdateTime        time.Time  `gorm:"autoUpdateTime;comment:更新时间" json:"update_time"`
}

// TableName 指定表名
func (User) TableName() string {
	return "users"
}

// UserGender 用户性别常量
const (
	GenderUnset  = 0 // 未设置
	GenderMale   = 1 // 男
	GenderFemale = 2 // 女
	GenderOther  = 3 // 其他
)